package com.mxw.leetcode.B2链表双指针;

import com.mxw.leetcode.B1链表.entity.ListNode;

/**
 * @author Administrator
 * @create 2024/3/13 19:19
 */
public class A01移除指定元素 {

    /**
     * 题意：删除链表中等于给定值 val 的所有节点。
     * 示例 1： 输入：head = [1,2,6,3,4,5,6], val = 6 输出：[1,2,3,4,5]
     * 示例 2： 输入：head = [], val = 1 输出：[]
     * 示例 3： 输入：head = [7,7,7,7], val = 7 输出：[]
     * <p>
     * 虚拟头节点
     * return 头结点的时候，别忘了 return dummyNode->next;， 这才是新的头结点
     */
    public ListNode removeElements(ListNode head, int val) {
        if (head == null) {
            return head;
        }
        // 因为删除可能涉及到头节点，所以设置dummy节点，统一操作，虚拟头节点
        ListNode dummy = new ListNode(-1, head);
        ListNode pre = dummy;
        ListNode cur = head;
        while (cur != null) {
            if (cur.value == val) {
                pre.next = cur.next;
            } else {
                pre = cur;
            }
            cur = cur.next;
        }
        return dummy.next;
    }

}
